package com.thunderbit;

import java.util.concurrent.CompletableFuture;

public class Demo {
    public static void main(String[] args) {

        // 异步执行任务 1：返回一个字符串
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "任务1结果");

        // 异步执行任务 2：返回一个数字
        CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 100);

        // 当两个任务都执行完后，合并它们的结果
        CompletableFuture<Void> all = CompletableFuture.allOf(future1, future2);

        all.whenComplete((v, ex) -> {
            if (ex == null) {
                // 获取两个结果
                String r1 = future1.join();
                Integer r2 = future2.join();

                System.out.println("任务全部完成");
                System.out.println("任务1的结果 = " + r1);
                System.out.println("任务2的结果 = " + r2);
            } else {
                System.out.println("出现异常：" + ex.getMessage());
            }
        });

        // 为了让主线程不退出（演示用）
        try { Thread.sleep(1000); } catch (Exception ignored) {}
    }
}
